"""Python递归函数"""

#在Python中，我们知道一个函数可以调用其他函数。函数甚至可能会调用自身。这些类型的构造称为递归函数。
#以下是查找整数的阶乘的递归函数的示例。
#数字的阶乘是从1到该数字的所有整数的乘积。例如，阶乘6（表示为6！）是1 * 2 * 3 * 4 * 5 * 6 = 720。

def calc_factorial(x):
    """这是一个
    求整数阶乘的递归函数"""

    if x == 1:
        return 1
    else:
        return (x * calc_factorial(x-1))
num = 4
print("The factorial of", num, "is", calc_factorial(num))

#在上面的示例中，它calc_factorial()是一个递归函数，它调用了自己。
#当我们用正整数调用此函数时，它将通过减少数量来递归调用自身。
#每个函数将数字乘以该数字下面的数字的阶乘，直到它等于1。可以在以下步骤中解释此递归调用。

#当数字减少到1时，递归结束。这称为基本条件。
#每个递归函数必须具有停止递归的基本条件，否则该函数将无限调用自身。
#Python解释器限制了递归的深度，以帮助避免无限递归，从而导致堆栈溢出。
#默认情况下，最大递归深度为 1000。如果超出限制，则结果为RecursionError。让我们看一个这样的条件。

#报错
"""def recursor():
    recursor()
recursor()"""

"""递归的优点"""

#递归函数使代码看起来干净整洁。
#使用递归可以将复杂的任务分解为更简单的子问题。
#与使用嵌套嵌套相比，使用递归更容易生成序列。

"""递归的缺点"""

#有时，递归背后的逻辑很难遵循。
#递归调用很昂贵（效率低），因为它们占用大量内存和时间。
#递归函数很难调试。